// una funzione friend può accedere a tutti i membri private e protected
// della classe per la quale è dichiarata come friend

#include <iostream>
using namespace std;

class mia_classe {
int a,b;
public:
friend int somma(mia_classe);
void imposta_ab(int,int);
};

void mia_classe:: imposta_ab(int i, int j)
{
a=i;
b=j;
}

// somma() non è funzione membro di alcuna classe

int somma(mia_classe x)
{
// dal momento che somma è friend di mia_classe ha accesso ad a ed a b
return x.a+x.b;
}


int main()
{
  mia_classe classe1;
  classe1.imposta_ab(3,4);
  cout << somma(classe1) <<endl;

  return 0;
}
